package cn.kgc.web.controller;

import cn.hutool.crypto.SecureUtil;
import cn.kgc.web.entity.User;
import cn.kgc.web.service.UserService;
import cn.kgc.web.utils.ResponseResult;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @author 课工场
 * @date 2024/1/16
 * @description
 */
@RestController
@RequestMapping("user")
@CrossOrigin   // 当前接口允许跨域
public class UserController {

    @Resource
    private UserService userService;

    // 用户登录请求
    @RequestMapping("login")
    public ResponseResult login(@RequestBody  User user) {
        System.out.println("user = " + user);

        /* 1. 根据 username  password  查询数据库  xiaoming  123456
        *  查询用户信息之前应该对前端用户输入的密码进行加密处理后 在进行数据查询操作
        *  因为在数据库中用户的密码在注册时做了MD5加密处理
        * */
        String md5Password = SecureUtil.md5(user.getPassword());

        // 构造查询条件 查询数据库
        //select  *  from user  where username = ? and password = ?
        LambdaQueryWrapper<User> lambda = new QueryWrapper<User>().lambda();
        lambda.eq(User::getUsername,user.getUsername())
                .eq(User::getPassword,md5Password);

        User one = userService.getOne(lambda);
        // 判定查询结果   查询的结果为null  则用户输入的登录数据有误
        if (ObjectUtils.isNull(one)){
            return ResponseResult.fail().message("用户名或密码错误");
        }

        return ResponseResult.success().message("登录成功");
    }

    // 用户注册请求
    @RequestMapping("register")
    public ResponseResult register(@RequestBody  User user) {
        System.out.println("user = " + user);
        //  username  password  保存user信息到数据库

        // 1. 判定当前用户名在数据库中是否存在  username  admin  select  *  from user  where username = admin
        LambdaQueryWrapper<User> lambda = new QueryWrapper<User>().lambda();
        lambda.eq(User::getUsername,user.getUsername());
        User one = userService.getOne(lambda);

        if (ObjectUtils.isNotNull(one)){
            return ResponseResult.fail().message("用户名已存在");
        }

        // 2.用户名不存在   将用户的密码进行加密处理
        String md5Password = SecureUtil.md5(user.getPassword());
        user.setPassword(md5Password);

        // 3.将用户信息写入数据库
        userService.save(user);
        return ResponseResult.success().message("注册成功");
    }

}
